import 'package:dartx/dartx.dart';
import 'package:get/get.dart';
import 'package:gluz/app/data/dictionary_entity.dart';
import 'package:gluz/app/data/shop/shop_category_entity.dart';
import 'package:gluz/app_session.dart';

import '../../data/user_profile_entity.dart';
import '../../data/user_vip_entity.dart';
import '../../routes/app_pages.dart';
import '../../utils/http_util.dart';

extension AppExtension on AppSession {

  void jumpAuth() {
    int identity = getUser()!.identity.toInt();
    switch (identity) {
      case 0: // 供应商
        Get.toNamed(Routes.AUTH_GYS);
        break;
      case 1: // 采购商
        Get.toNamed(Routes.AUTH_CGS);
        break;
      case 2: // 货代公司
        Get.toNamed(Routes.AUTH_HDGS);
        break;
      case 3: // 运输公司
        Get.toNamed(Routes.AUTH_HDGS);
        break;
      case 4: // 服务商
        Get.toNamed(Routes.AUTH_FWS);
        break;
      case 5: // 翻译
        Get.toNamed(Routes.AUTH_FY);
        break;
      case 6: // 个人
        Get.toNamed(Routes.AUTH_GR);
        break;
      default:
        break;
    }
  }
  //       'bus_user_country', // 国籍
  //       'bus_user_identity', // 用户身份
  //       'bus_language_ability', // 翻译语言能力
  //       'bus_professional_scope', // 翻译专业范围
  //       'bus_translator_score', // 翻译收费标准
  //       'bus_service_item', // 服务项目
  //       'bus_professional_agent', // 专业代办分类
  //       'bus_life_ad', // 生活广告分类
  //       'bus_offline_service', // 全球翻译官-线下服务分类
  //       'bus_offline_service_score', // 全球翻译官-线下服务-信息价格列表
  //       'bus_inquiry', // 全球翻译官-问询服务分类
  List<DictionaryEntity>? dictionaryEntityList(String dictType) {
    List<Map<String, dynamic>>? mapList = storage.read(dictType);
    List<DictionaryEntity>? dictEntityList = mapList?.map((e) => DictionaryEntity.fromJson(e)).toList();
    return dictEntityList;
  }

  /// 请求所有字典配置
  void fetchAllDictionaryList() {
    List<String> dictTypes = [
      'bus_user_country', // 国籍
      'bus_user_identity', // 用户身份
      'bus_language_ability', // 翻译语言能力
      'bus_professional_scope', // 翻译专业范围
      'bus_translator_score', // 翻译收费标准
      'bus_service_item', // 服务项目
      'bus_professional_agent', // 专业代办分类
      'bus_life_ad', // 生活广告分类
      'bus_offline_service', // 全球翻译官-线下服务分类
      'bus_offline_service_score', // 全球翻译官-线下服务-信息价格列表
      'bus_inquiry', // 全球翻译官-问询服务分类
    ];

    for (var dictType in dictTypes) {
      _fetchDictionaryList(dictType).then((List<DictionaryEntity>? list) {
        List<Map<String, dynamic>>? listMap = list?.map((e) => e.toJson()).toList();
        storage.write(dictType, listMap);
      });
    }
  }


  // 接口说明
  // 字典类型取值说明
  // 国籍：bus_user_country
  // 用户身份：bus_user_identity
  // 翻译语言能力 ： bus_language_ability
  // 翻译专业范围 ： bus_professional_scope
  // 翻译收费标准 ： bus_translator_score
  // 服务项目： bus_service_item
  // 专业代办分类：bus_professional_agent
  // 生活广告分类：bus_life_ad
  // 全球翻译官-线下服务分类：bus_offline_service
  // 全球翻译官-线下服务-信息价格列表：bus_offline_service_score
  // 全球翻译官-问询服务分类：bus_inquiry
  Future<List<DictionaryEntity>?> _fetchDictionaryList(String dictType) async {
    final list = await http.request(
      path: '/api/dict/dictData',
      params: {
        'dictType': dictType,
      },
      options: http.forceCacheOptions(),
      fromJson: (e) => List.from(e).map((e) => DictionaryEntity.fromJson(e)).toList(),
    );
    return list;
  }

  /// 获取用户信息
  Future<UserProfileEntity?> getUserFromServer() async {
    UserProfileEntity? user = await app.http.request(
      path: '/api/user/getInfo',
      method: Method.get,
      fromJson: (e) => UserProfileEntity.fromJson(e),
    );
    if (user != null) {
      setUser(user);
    }
    return user;
  }

  /// 获取用户会员信息
  Future<UserVipEntity?> getUserVipEntity() async {
    final res = await http.request(
      path: '/api/user/getAccountInfo',
      params: {
        'userId': getUser()?.id,
      },
      fromJson: (e) => UserVipEntity.fromJson(e),
    );
    if (res == null) return null;
    UserProfileEntity? user = getUser();
    if (user != null) {
      user.vipEntity = res;
      setUser(user);
    }
    return res;
  }


  // 商品类别
  Future<List<ShopCategoryEntity>> getShopCategory({int pId = 0, bool useCache = true}) async {
    final res = await http.request(
      path: '/api/mall/getProductCategoryList',
      params: {
        'pageSize': 100,
        'pageNum': 0,
        // 'clevel': 1,
        'pId': pId,
      },
      options: useCache ? http.forceCacheOptions() : null,
      fromJson: (e) {
        List records = e['records'];
        return records.map((e) => ShopCategoryEntity.fromJson(e)).toList();
      },
    );
    return res ?? [];
  }

}
